package com.shop.cereshop.app.tencent.im.service;

import com.shop.cereshop.app.tencent.im.model.transfer.*;
import com.shop.cereshop.commons.result.Result;

import java.util.List;

public interface TransferOrderService {

    /**
     * 创建转账订单
     * @param param 创建转账订单参数
     * @return  创建的转账订单
     */
    Result<TransferOrderVO> create(CreateTransferOrderParam param);

    /**
     * 发送转账订单
     * @param param 发送转账订单参数
     * @return  发送结果
     */
    Result<Void> send(SendTransferOrderParam param);

    /**
     * 领取转账
     * @param transferDTO 领取转账订单参数
     * @return  领取结果
     */
    Result<Object> receive(TransferOrderDTO transferDTO);

    /**
     * 修改发送给腾讯IM的转账订单历史信息
     * @param transferId  转账单号
     * @return  true：修改成功 false：修改失败
     */
    boolean modifyTimMsg(String transferId);


    /**
     * 发出的转账过期后，退还至用户钱包余额
     * @param transferId 转账单号
     * returns 退款结果
     */
    boolean refund(String transferId, int refundType);

    /**
     * 用户退回转账，退还至用户钱包余额
     * @param transferDTO 退款参数
     * returns 退款结果
     */
    Result<Object> refundByUser(TransferOrderDTO transferDTO);

    /**
     * 查询转账订单详情
     * @param transferId 转账单号
     * @return  转账订单详情
     */
    Result<TransferOrderDetailVO> detail(String transferId);

    /**
     * 查询过期未领取的转账订单列表
     * @return 订单列表
     */
    List<TransferOrder> getExpiredTransferOrders();

}
